home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine CD 1995 / Archive Magazine CD 1995.iso / discs / prog_disc / volume_1 / issue_11 / wimp / menus (.txt) next >
Encoding:
RISC OS BBC BASIC V Source  |  1995-06-22  |  4.4 KB  |  185 lines

  1.  >$.Wimp.Menus
  2.  ************************************
  3.  *  Using Menus in the WIMP System  *
  4.  *       By Adrian Philip Look      *
  5.  *           13th July 1988         *
  6.  ************************************
  7. ("FX4,0"):
  8. $;" at line ";
  9.  data% &2000
  10.  these are not imperitive but they do
  11.  make the WIMP system much more presentable
  12. *PRINT $.Wimp.Palette
  13. variables
  14. version=
  15. wimp_initialise
  16. main_menu : 
  17.  create menu hierarchy
  18.  main polling loop
  19.  "Wimp_ForceRedraw",-1,0,0,1280,1024
  20. *POINTER
  21.  "Wimp_Poll",,block% 
  22.  reason
  23. wimp_poll(reason)
  24. variables
  25.  block% &100 : 
  26.  a general data block
  27.  menu% &2000 : 
  28.  the menu structure data block
  29.  text% 12 : 
  30.  a data block for holding my text entry
  31.  text$(50),setting(50),flags(50),data(50)
  32.  submenu(50),ref(50),menupos(20)
  33. ( menu_title_fg=13 : 
  34.  colours
  35. menu_title_bg=12
  36. menu_work_fg=7
  37. menu_work_bg=0
  38. tick=&01 : 
  39.  flag values
  40. dotted=&02
  41. writeable=&4
  42. last=&80
  43. default=&10021
  44. shaded=&400000
  45. menu_variables
  46. menu_variables
  47. first=
  48. second=
  49. :    sel=
  50. $text%="!default"
  51. main_menu : 
  52.  create 'main' menu using 'short-hand'
  53. no=0:
  54.  x,y,b
  55.  menu0 (main menu)
  56. define_menu_text("first",no,0,first,0,0,default,-1,0):no+=1
  57. define_menu_text("second",no,0,second,-1,0,default,-1,0):no+=1
  58. define_menu_text("not here",no,0,0,0,-1,default,-1,0):no+=1
  59. define_menu_text("action",no,0,0,-1,0,default,1,0):no+=1
  60. define_menu_text("just",no,0,0,0,
  61.  sel,default,-1,0):no+=1
  62. define_menu_text("some",no,0,0,0,
  63.  sel,default,-1,0):no+=1
  64. define_menu_text("text",no,0,0,0,
  65.  sel,default,2,-1):no+=1
  66.  menu1
  67. define_menu_text("menu1",no,0,0,0,0,0,-1,-1):no+=1
  68. define_menu_text("deselect",no,0,
  69.  sel,0,
  70.  sel,default,-1,0):no+=1
  71. define_menu_text("select",no,0,sel,-1,sel,default,-1,0):no+=1
  72. define_menu_text("leave",no,0,0,0,0,default,-1,-1):no+=1
  73.  menu2
  74. define_menu_text("text",no,0,0,0,0,0,-1,-1):no+=1
  75. define_menu_text("text%(12)",no,-1,0,0,0,default,-1,-1):no+=1
  76.  create menu structure
  77. create_menu("adrian",no,x,y)
  78.  decoding the short hand
  79. define_menu_text(text$,n,w,t,d,s,flags,sm,l)
  80. text$(n)=text$
  81. setting(n)=0
  82.  setting(n)=setting(n) 
  83.  writeable:flags=flags 
  84.  &100
  85.  setting(n)=setting(n) 
  86.  tick
  87.  setting(n)=setting(n) 
  88.  dotted
  89.  setting(n)=setting(n) 
  90.  last
  91.  flags=flags 
  92.  shaded
  93. flags(n)=flags
  94. submenu(n)=sm
  95.  creating the menu structure data block
  96. create_menu(title$,n,x,y)
  97. mb%=menu%
  98. menus=0:q=0
  99. menupos(menus)=mb%:menus+=1
  100. $mb%=title$
  101. mb%?12=menu_title_fg
  102. mb%?13=menu_title_bg
  103. mb%?14=menu_work_fg
  104. mb%?15=menu_work_bg
  105. l&mb%!16=224 : 
  106.  width of menu items
  107. m'mb%!20=40  : 
  108.  height of menu items
  109. nAmb%!24=10  : 
  110.  vertical gap between items (also top & bottom)
  111. itemptr=mb%+28
  112. itemptr!0=setting(q)
  113. ref(q)=itemptr+4
  114. t<itemptr!8=flags(q) 
  115.  menu_work_bg<<28 
  116.  menu_work_fg<<24
  117.  (flags(q) 
  118.  &100)=0 
  119. $(itemptr+12)=text$(q)
  120. text$(q),"(")
  121. y"itemptr!12=
  122. text$(q),pos-1))
  123. itemptr!16=-1
  124. {,itemptr!20=
  125. text$(q),
  126. (text$(q))-pos))
  127. itemptr+=24:q+=1
  128.  (setting(q-1) 
  129.  last)>0
  130. mb%=itemptr
  131.  q<>n 
  132.  title$=text$(q):q+=1
  133.  q=0 
  134.  submenu(q)>0 
  135.  submenu(q)<menus 
  136. !ref(q)=menupos(submenu(q))
  137. !ref(q)=-1
  138.  "Wimp_CreateMenu",,menu%,x,y
  139.  servicing the Wimp_Poll routine
  140. wimp_poll(reason)
  141.  reason 
  142.  2  : 
  143. open_window(!block%)
  144.  3  : 
  145. close_window(!block%)
  146.  6  : 
  147.  (block%!8)
  148. main_menu : 
  149.  if MENU pressed pop up the menu
  150.  9  : 
  151. menu_action : 
  152.  decode the menu
  153. wimp_initialise
  154.  version%
  155.  "Wimp_Initialise",0 
  156.  version%
  157. =version%/100
  158. open_window(handle)
  159. block%!0=handle
  160.  "Wimp_OpenWindow",,block%
  161. close_window(handle)
  162. !block%=handle
  163.  "Wimp_CloseWindow",,block%
  164.  decode the item_selected_list
  165. menu_action
  166. level0=block%!0
  167. level1=block%!4
  168.  level0 
  169.  0 : first=
  170.  first
  171.  1 : second=
  172.  second
  173.  3 : 
  174.  level1 
  175.          
  176.  0,1 : sel=
  177.           
  178.  2   : 
  179. close_down
  180.          
  181. menu_close
  182.  "Wimp_CreateMenu",,-1
  183. close_down
  184.  "Wimp_CloseDown"
  185.